<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/Python-3.6.2/Include/genobject.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/Python-3.6.2/Include/genobject.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> 
<a name="2" /><span class="True">       2:</span> <span class="k">/* Generator object interface */</span>
<a name="3" /><span class="True">       3:</span> 
<a name="4" /><span class="True">       4:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="5" /><span class="True">       5:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="macros_noref.html#_UHlfR0VOT0JKRUNUX0hfMA__"><span class="b">Py_GENOBJECT_H</span></a>
<a name="6" /><span class="True">       6:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlfR0VOT0JKRUNUX0hfMA__"><span class="b">Py_GENOBJECT_H</span></a>
<a name="7" /><span class="False">       7:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__cplusplus</span>
<a name="8" /><span class="False">       8:</span> <span class="m">extern</span> <span class="e">&quot;C&quot;</span> <span class="f">{</span>
<a name="9" /><span class="True">       9:</span> <span class="f">#</span><span class="n">endif</span>
<a name="10" /><span class="True">      10:</span> 
<a name="11" /><span class="True">      11:</span> <span class="m">struct</span> <span class="b">_frame</span><span class="f">;</span> <span class="k">/* Avoid including frameobject.h */</span>
<a name="12" /><span class="True">      12:</span> 
<a name="13" /><span class="True">      13:</span> <span class="k">/* _PyGenObject_HEAD defines the initial segment of generator</span>
<a name="14" /><span class="True">      14:</span> <span class="k">   and coroutine objects. */</span>
<a name="15" /><span class="True">      15:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_ref.html#_X1B5R2VuT2JqZWN0X0hFQURfMA__"><span class="b">_PyGenObject_HEAD</span></a><span class="f">(</span><span class="b">prefix</span><span class="f">)</span>                                           \
<a name="16" /><span class="True">      16:</span>     <a href="macros_ref.html#_UHlPYmplY3RfSEVBRF8w"><span class="b">PyObject_HEAD</span></a>                                                           \
<a name="17" /><span class="True">      17:</span>     <span class="k">/* Note: gi_frame can be NULL if the generator is &quot;finished&quot; */</span>         \
<a name="18" /><span class="True">      18:</span>     <span class="m">struct</span> <span class="b">_frame</span> <span class="f">*</span><span class="b">prefix</span><span class="f">##</span><span class="b">_frame</span><span class="f">;</span>                                          \
<a name="19" /><span class="True">      19:</span>     <span class="k">/* True if generator is being executed. */</span>                              \
<a name="20" /><span class="True">      20:</span>     <span class="m">char</span> <span class="b">prefix</span><span class="f">##</span><span class="b">_running</span><span class="f">;</span>                                                  \
<a name="21" /><span class="True">      21:</span>     <span class="k">/* The code object backing the generator */</span>                             \
<a name="22" /><span class="True">      22:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">prefix</span><span class="f">##</span><span class="b">_code</span><span class="f">;</span>                                                \
<a name="23" /><span class="True">      23:</span>     <span class="k">/* List of weak reference. */</span>                                           \
<a name="24" /><span class="True">      24:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">prefix</span><span class="f">##</span><span class="b">_weakreflist</span><span class="f">;</span>                                         \
<a name="25" /><span class="True">      25:</span>     <span class="k">/* Name of the generator. */</span>                                            \
<a name="26" /><span class="True">      26:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">prefix</span><span class="f">##</span><span class="b">_name</span><span class="f">;</span>                                                \
<a name="27" /><span class="True">      27:</span>     <span class="k">/* Qualified name of the generator. */</span>                                  \
<a name="28" /><span class="True">      28:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">prefix</span><span class="f">##</span><span class="b">_qualname</span><span class="f">;</span>
<a name="29" /><span class="True">      29:</span> 
<a name="30" /><span class="True">      30:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="f">{</span>
<a name="31" /><span class="True">      31:</span>     <span class="k">/* The gi_ prefix is intended to remind of generator-iterator. */</span>
<a name="32" /><span class="True">      32:</span>     <a href="macros_ref.html#_X1B5R2VuT2JqZWN0X0hFQURfMA__"><span class="b">_PyGenObject_HEAD</span></a><span class="f">(</span><span class="b">gi</span><span class="f">)</span>
<a name="33" /><span class="True">      33:</span> <span class="f">}</span> <span class="b">PyGenObject</span><span class="f">;</span>
<a name="34" /><span class="True">      34:</span> 
<a name="35" /><span class="True">      35:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">PyGen_Type</span><span class="f">;</span>
<a name="36" /><span class="True">      36:</span> 
<a name="37" /><span class="True">      37:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlHZW5fQ2hlY2tfMA__"><span class="b">PyGen_Check</span></a><span class="f">(</span><span class="b">op</span><span class="f">)</span> <a href="macros_ref.html#_UHlPYmplY3RfVHlwZUNoZWNrXzA_"><span class="b">PyObject_TypeCheck</span></a><span class="f">(</span><span class="b">op</span><span class="f">,</span> <span class="f">&amp;</span><span class="b">PyGen_Type</span><span class="f">)</span>
<a name="38" /><span class="True">      38:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlHZW5fQ2hlY2tFeGFjdF8w"><span class="b">PyGen_CheckExact</span></a><span class="f">(</span><span class="b">op</span><span class="f">)</span> <span class="f">(</span><a href="macros_ref.html#_UHlfVFlQRV8w"><span class="b">Py_TYPE</span></a><span class="f">(</span><span class="b">op</span><span class="f">)</span> <span class="f">==</span> <span class="f">&amp;</span><span class="b">PyGen_Type</span><span class="f">)</span>
<a name="39" /><span class="True">      39:</span> 
<a name="40" /><span class="True">      40:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyGen_New</span><span class="f">(</span><span class="m">struct</span> <span class="b">_frame</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="41" /><span class="True">      41:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyGen_NewWithQualName</span><span class="f">(</span><span class="m">struct</span> <span class="b">_frame</span> <span class="f">*</span><span class="f">,</span>
<a name="42" /><span class="True">      42:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">name</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="b">qualname</span><span class="f">)</span><span class="f">;</span>
<a name="43" /><span class="True">      43:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyGen_NeedsFinalizing</span><span class="f">(</span><span class="b">PyGenObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="44" /><span class="True">      44:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyGen_SetStopIterationValue</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="45" /><span class="True">      45:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyGen_FetchStopIterationValue</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="46" /><span class="True">      46:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">_PyGen_Send</span><span class="f">(</span><span class="b">PyGenObject</span> <span class="f">*</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="47" /><span class="True">      47:</span> <span class="b">PyObject</span> <span class="f">*</span><span class="b">_PyGen_yf</span><span class="f">(</span><span class="b">PyGenObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="48" /><span class="True">      48:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">void</span><span class="f">)</span> <span class="b">_PyGen_Finalize</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="b">self</span><span class="f">)</span><span class="f">;</span>
<a name="49" /><span class="True">      49:</span> 
<a name="50" /><span class="True">      50:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="51" /><span class="True">      51:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="f">{</span>
<a name="52" /><span class="True">      52:</span>     <a href="macros_ref.html#_X1B5R2VuT2JqZWN0X0hFQURfMA__"><span class="b">_PyGenObject_HEAD</span></a><span class="f">(</span><span class="b">cr</span><span class="f">)</span>
<a name="53" /><span class="True">      53:</span> <span class="f">}</span> <span class="b">PyCoroObject</span><span class="f">;</span>
<a name="54" /><span class="True">      54:</span> 
<a name="55" /><span class="True">      55:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">PyCoro_Type</span><span class="f">;</span>
<a name="56" /><span class="True">      56:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">_PyCoroWrapper_Type</span><span class="f">;</span>
<a name="57" /><span class="True">      57:</span> 
<a name="58" /><span class="True">      58:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">_PyAIterWrapper_Type</span><span class="f">;</span>
<a name="59" /><span class="True">      59:</span> <span class="b">PyObject</span> <span class="f">*</span><span class="b">_PyAIterWrapper_New</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="b">aiter</span><span class="f">)</span><span class="f">;</span>
<a name="60" /><span class="True">      60:</span> 
<a name="61" /><span class="True">      61:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlDb3JvX0NoZWNrRXhhY3RfMA__"><span class="b">PyCoro_CheckExact</span></a><span class="f">(</span><span class="b">op</span><span class="f">)</span> <span class="f">(</span><a href="macros_ref.html#_UHlfVFlQRV8w"><span class="b">Py_TYPE</span></a><span class="f">(</span><span class="b">op</span><span class="f">)</span> <span class="f">==</span> <span class="f">&amp;</span><span class="b">PyCoro_Type</span><span class="f">)</span>
<a name="62" /><span class="True">      62:</span> <span class="b">PyObject</span> <span class="f">*</span><span class="b">_PyCoro_GetAwaitableIter</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="b">o</span><span class="f">)</span><span class="f">;</span>
<a name="63" /><span class="True">      63:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyCoro_New</span><span class="f">(</span><span class="m">struct</span> <span class="b">_frame</span> <span class="f">*</span><span class="f">,</span>
<a name="64" /><span class="True">      64:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">name</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="b">qualname</span><span class="f">)</span><span class="f">;</span>
<a name="65" /><span class="True">      65:</span> 
<a name="66" /><span class="True">      66:</span> <span class="k">/* Asynchronous Generators */</span>
<a name="67" /><span class="True">      67:</span> 
<a name="68" /><span class="True">      68:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="f">{</span>
<a name="69" /><span class="True">      69:</span>     <a href="macros_ref.html#_X1B5R2VuT2JqZWN0X0hFQURfMA__"><span class="b">_PyGenObject_HEAD</span></a><span class="f">(</span><span class="b">ag</span><span class="f">)</span>
<a name="70" /><span class="True">      70:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">ag_finalizer</span><span class="f">;</span>
<a name="71" /><span class="True">      71:</span> 
<a name="72" /><span class="True">      72:</span>     <span class="k">/* Flag is set to 1 when hooks set up by sys.set_asyncgen_hooks</span>
<a name="73" /><span class="True">      73:</span> <span class="k">       were called on the generator, to avoid calling them more</span>
<a name="74" /><span class="True">      74:</span> <span class="k">       than once. */</span>
<a name="75" /><span class="True">      75:</span>     <span class="m">int</span> <span class="b">ag_hooks_inited</span><span class="f">;</span>
<a name="76" /><span class="True">      76:</span> 
<a name="77" /><span class="True">      77:</span>     <span class="k">/* Flag is set to 1 when aclose() is called for the first time, or</span>
<a name="78" /><span class="True">      78:</span> <span class="k">       when a StopAsyncIteration exception is raised. */</span>
<a name="79" /><span class="True">      79:</span>     <span class="m">int</span> <span class="b">ag_closed</span><span class="f">;</span>
<a name="80" /><span class="True">      80:</span> <span class="f">}</span> <span class="b">PyAsyncGenObject</span><span class="f">;</span>
<a name="81" /><span class="True">      81:</span> 
<a name="82" /><span class="True">      82:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">PyAsyncGen_Type</span><span class="f">;</span>
<a name="83" /><span class="True">      83:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">_PyAsyncGenASend_Type</span><span class="f">;</span>
<a name="84" /><span class="True">      84:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">_PyAsyncGenWrappedValue_Type</span><span class="f">;</span>
<a name="85" /><span class="True">      85:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">_PyAsyncGenAThrow_Type</span><span class="f">;</span>
<a name="86" /><span class="True">      86:</span> 
<a name="87" /><span class="True">      87:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyAsyncGen_New</span><span class="f">(</span><span class="m">struct</span> <span class="b">_frame</span> <span class="f">*</span><span class="f">,</span>
<a name="88" /><span class="True">      88:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">name</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="b">qualname</span><span class="f">)</span><span class="f">;</span>
<a name="89" /><span class="True">      89:</span> 
<a name="90" /><span class="True">      90:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlBc3luY0dlbl9DaGVja0V4YWN0XzA_"><span class="b">PyAsyncGen_CheckExact</span></a><span class="f">(</span><span class="b">op</span><span class="f">)</span> <span class="f">(</span><a href="macros_ref.html#_UHlfVFlQRV8w"><span class="b">Py_TYPE</span></a><span class="f">(</span><span class="b">op</span><span class="f">)</span> <span class="f">==</span> <span class="f">&amp;</span><span class="b">PyAsyncGen_Type</span><span class="f">)</span>
<a name="91" /><span class="True">      91:</span> 
<a name="92" /><span class="True">      92:</span> <span class="b">PyObject</span> <span class="f">*</span><span class="b">_PyAsyncGenValueWrapperNew</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="93" /><span class="True">      93:</span> 
<a name="94" /><span class="True">      94:</span> <span class="m">int</span> <span class="b">PyAsyncGen_ClearFreeLists</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="95" /><span class="True">      95:</span> 
<a name="96" /><span class="True">      96:</span> <span class="f">#</span><span class="n">endif</span>
<a name="97" /><span class="True">      97:</span> 
<a name="98" /><span class="True">      98:</span> <span class="f">#</span><span class="n">undef</span> <a href="macros_ref.html#_X1B5R2VuT2JqZWN0X0hFQURfMA__"><span class="b">_PyGenObject_HEAD</span></a>
<a name="99" /><span class="True">      99:</span> 
<a name="100" /><span class="False">     100:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__cplusplus</span>
<a name="101" /><span class="False">     101:</span> <span class="f">}</span>
<a name="102" /><span class="True">     102:</span> <span class="f">#</span><span class="n">endif</span>
<a name="103" /><span class="True">     103:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* !Py_GENOBJECT_H */</span>
<a name="104" /><span class="True">     104:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* Py_LIMITED_API */</span>
<a name="105" /><span class="True">     105:</span> </pre>
  </body>
</html>
